package club.itstudio.itouc.entity

import java.util.*

/**
 * 课程信息
 */
data class Course(
    val classCode: String,                              // 课程代码
    val classNum: String,                               // 选课号
    val className: String,                              // 课程名
    val campus: String,                                 // 校区
    val teachers: List<String>,                         // 教师
    var limitNum: Int,                                  // 限选人数
    var nowNum: Int,                                    // 已选人数
    var determineNum: Int,                              // 确定人数
    val credit: String,                                 // 学分
    var time: List<CourseTime> = mutableListOf(),       // 上课时间
    var type: String                                    // 课程类型
)

/**
 * 上课时间
 */
data class CourseTime(
        var description: String,        // 文字描述
        var weeks: IntArray,            // 周次
        var classRoom: String,          // 教室
        val day: Int,                   // 星期几
        val lesson: IntArray,           // 第几节课
        val remark: String              // 备注
) {
    override fun equals(other: Any?): Boolean {
        return super.equals(other)
    }

    override fun hashCode(): Int {
        return super.hashCode()
    }

    /**
     * 时间类型
     */
    fun type(): String {
        return "${Arrays.toString(weeks)}-$day-${Arrays.toString(lesson)}"
    }

    /**
     * 判断时间是否冲突
     * @return true: 冲突， false： 不冲突
     */
    fun timeConflict(another: CourseTime): Boolean {
        weeks.forEach {
            if (another.weeks.contains(it)) { // 判断周次
                if (day == another.day) {// 判断星期
                    lesson.forEach {    // 判断上课时间
                        if (another.lesson.contains(it)) return true
                    }
                }
            }
        }
        return false
    }
}

/**
 * 课程类型，因为专业课需要绑定年级和专业代码，所以没有直接与Course相连
 */
enum class CourseType(val type: String){
    All("All"),
    Public("公共基础课"),
    Common("通识课"),
    CommonMooc("通识MOOC"),
    Specialty("专业课"),
    Polity("思政军事"),
    PE("体育"),
    AdvancedEnglish("英语"),
    Physics("物理"),
    Chemistry("化学"),
    Math("数学"),
    BasicComputer("计算机基础")
}

enum class Campus(val campus: String){
    All("All"),
    LAO("崂山校区"),
    YU("鱼山校区");
}

